Класс System.Collections.ObjectModel.ObservableCollection<T>

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс ObservableCollection<T> представляет динамическую коллекцию данных, которая предоставляет уведомления при добавлении или удалении элементов или при обновлении всего списка.

Во многих случаях данные, с которыми вы работаете, являются коллекцией объектов. Например, распространенный сценарий в привязке данных заключается в использовании ItemsControl такого типа, как , ListViewListBoxили TreeView для отображения коллекции записей.

Можно перечислить любую коллекцию, которая реализует интерфейс IEnumerable. Однако чтобы настроить динамические привязки таким образом, чтобы вставки и удаления элементов в коллекции автоматически обновляли пользовательский интерфейс, в коллекции должен быть реализован интерфейс INotifyCollectionChanged. Этот интерфейс предоставляет CollectionChanged событие, событие, которое должно вызываться при изменении базовой коллекции.

Класс ObservableCollection<T> — это тип сбора данных, реализующий INotifyCollectionChanged интерфейс.

Перед реализацией собственной коллекции рассмотрите возможность использования ObservableCollection<T> или одного из существующих классов коллекций, таких как List<T>, Collection<T> и BindingList<T>, среди многих других. Если у вас есть расширенный сценарий и вы хотите реализовать собственную коллекцию, рассмотрите возможность использования IList, которая предоставляет не универсальную коллекцию объектов, к которым можно получить отдельный доступ по индексу. Реализация IList обеспечивает лучшую производительность подсистемы привязки данных.

Примечание.

Для полной поддержки передачи значений данных из исходных объектов привязки в целевые объекты привязки каждый объект в коллекции, поддерживающий привязываемые свойства, должен реализовать соответствующий механизм уведомления об изменении свойства, INotifyPropertyChanged например интерфейс.

Дополнительные сведения см. в разделе "Привязка к коллекциям" в обзоре привязки данных.

Заметки об использовании XAML

ObservableCollection<T> можно использовать в качестве элемента объекта XAML в Windows Presentation Foundation (WPF), в версиях 3.0 и 3.5. Однако использование имеет существенные ограничения.

  • ObservableCollection<T> должен быть корневым элементом, так как x:TypeArguments атрибут, который должен использоваться для указания ограниченного типа универсального ObservableCollection<T> элемента, поддерживается только в элементе объекта для корневого элемента.

  • Необходимо объявить x:Class атрибут (который подразумевает, что действие сборки для этого XAML-файла должно быть Page или другим действием сборки, скомпилированным XAML).

  • ObservableCollection<T> находится в пространстве имен и сборке, которые изначально не сопоставлены с пространством имен XML по умолчанию. Необходимо сопоставить префикс для пространства имен и сборки, а затем использовать этот префикс в теге элемента объекта для ObservableCollection<T>.

Более простой способ использования ObservableCollection<T> возможностей из XAML в приложении заключается в объявлении собственного не универсального пользовательского класса коллекции, который наследуется от ObservableCollection<T>и ограничивает его определенным типом. Затем сопоставляйте сборку, содержащую этот класс, и ссылайтесь на нее как элемент объекта в XAML.